/**
 * HTTP 请求头管理示例
 * 展示如何使用 chic-core 的 HTTP 工具进行请求头管理
 */

import { createHttpClient, httpClient } from '../src/utils/http.js';

// 示例1: 使用默认HTTP客户端
console.log('=== 使用默认HTTP客户端 ===');

// 设置单个请求头
httpClient.setHeader('X-Custom-Header', 'custom-value');

// 批量设置请求头
httpClient.setHeader({
  'X-API-Version': '1.0',
  'X-Client-Type': 'web',
  'Accept-Language': 'zh-CN'
});

// 设置认证头
httpClient.setAuthHeader('your-jwt-token-here');

// 设置内容类型
httpClient.setContentType('application/json');

// 设置用户代理
httpClient.setUserAgent('MyApp/1.0.0');

// 获取所有请求头
console.log('当前所有请求头:', httpClient.getHeader());

// 获取特定请求头
console.log('Authorization头:', httpClient.getHeader('Authorization'));

// 示例2: 创建自定义HTTP客户端
console.log('\n=== 创建自定义HTTP客户端 ===');

const customClient = createHttpClient({
  baseURL: 'https://api.example.com',
  timeout: 5000
});

// 链式调用设置多个请求头
customClient
  .setHeader('X-API-Key', 'your-api-key')
  .setHeader('X-Request-ID', 'req-12345')
  .setContentType('application/json')
  .setUserAgent('CustomClient/2.0.0');

console.log('自定义客户端请求头:', customClient.getHeader());

// 示例3: 单次请求的请求头
console.log('\n=== 单次请求的请求头 ===');

// 使用 withHeaders 方法为单次请求设置特殊请求头
const specialHeaders = customClient.withHeaders({
  'X-Special-Request': 'true',
  'X-Priority': 'high'
});

// 在请求时应用这些请求头
// const response = await customClient.get('/data', {}, {
//   transformRequest: [specialHeaders]
// });

// 示例4: 请求头管理操作
console.log('\n=== 请求头管理操作 ===');

// 删除单个请求头
customClient.removeHeader('X-Request-ID');
console.log('删除X-Request-ID后的请求头:', customClient.getHeader());

// 批量删除请求头
customClient.removeHeader(['X-API-Key', 'X-Special-Request']);
console.log('批量删除后的请求头:', customClient.getHeader());

// 清空所有请求头
customClient.clearHeaders();
console.log('清空所有请求头后:', customClient.getHeader());

// 示例5: 实际请求示例
console.log('\n=== 实际请求示例 ===');

// 重新设置必要的请求头
httpClient
  .setHeader('Content-Type', 'application/json')
  .setAuthHeader('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...')
  .setHeader('X-API-Version', '2.0');

// 模拟GET请求
console.log('准备发送GET请求到 /users');
console.log('请求头:', httpClient.getHeader());

// 模拟POST请求
console.log('\n准备发送POST请求到 /users');
console.log('请求头:', httpClient.getHeader());

// 示例6: 动态请求头管理
console.log('\n=== 动态请求头管理 ===');

// 根据环境设置不同的请求头
const isDevelopment = process.env.NODE_ENV === 'development';

if (isDevelopment) {
  httpClient.setHeader('X-Debug-Mode', 'true');
  httpClient.setHeader('X-Environment', 'development');
} else {
  httpClient.setHeader('X-Environment', 'production');
  httpClient.removeHeader('X-Debug-Mode');
}

console.log('环境相关请求头:', httpClient.getHeader());

// 示例7: 请求头验证
console.log('\n=== 请求头验证 ===');

// 检查必要的请求头是否存在
const requiredHeaders = ['Authorization', 'Content-Type'];
const missingHeaders = requiredHeaders.filter(header => !httpClient.getHeader(header));

if (missingHeaders.length > 0) {
  console.warn('缺少必要的请求头:', missingHeaders);
} else {
  console.log('所有必要的请求头都已设置');
}

console.log('\n=== 请求头管理示例完成 ===');
